home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / misc~1 / 4 / othello.bas < prev    next >
Encoding:
BASIC Source File  |  1986-03-06  |  15.9 KB  |  337 lines

  1. 10    REM    OTHELLO
  2. 20    DIM X(99), A(88), XX(66), Y(8), Z(60), G(25), H(25), W(88), X1(25), X2(25), EV(25), X3(25), YY(25):fullw 2:clearw 2:gosub init:goto entry
  3. 30    CLRPRT: ht=106:wd=284:x=2:y=2:color 1,0,1,1,1:gosub pbox:gotoxy 1,1:return
  4. 40    PAUSE:?"Push either button."
  5. 42    gosub mouse:if key=0 goto 42
  6. 44    return
  7. 50    NUMGET: badnum=0:if y<11 and x>287 and x<575 then o=9:jp=9:return
  8. 60    if x<287 or x>575 or y>155 then badnum=1:return
  9. 70    o=int((y-11)/18+1):jp=int((x-287)/36+1):return
  10. 80    PBOX:'entry
  11. 90    poke contrl,11
  12. 100   poke contrl+2,2
  13. 110   poke contrl+6,0
  14. 120   poke contrl+10,1
  15. 130   poke ptsin,x
  16. 140   poke ptsin+2,y+20
  17. 150   poke ptsin+4,x+wd
  18. 160   poke ptsin+6,y+ht+20
  19. 170   vdisys(1)
  20. 180   return
  21. 190   MOUSE:a#=gb
  22. 200   gintout=peek(a#+12)
  23. 210   poke systab+24,1
  24. 220   poke contrl,122:poke contrl+2,0:poke contrl+6,1
  25. 230   poke intin,0:vdisys(1)
  26. 240   gemsys(79)
  27. 250   x=peek(gintout+2)
  28. 260   y=peek(gintout+4)-20
  29. 270   key=peek(gintout+6):poke systab+24,0:return
  30. 280   if key=2 then poke systab+24,0:return
  31. 290   if key=1 then poke systab+24,0:return
  32. 300   goto 240
  33. 310   ERRSOUND:sound 1,8,9,4,8:sound 1,0,0,0,0:return
  34. 320   ENTRY:INPUT "Play the computer (y or n)?", Z$
  35. 330   IF Z$ = "n" THEN U = -4: X(54) = -4: X(45) = -4: X(55) = 4:   X(44) = 4: MOVES = MOVES-1: GOSUB 1180: GOTO 400
  36. 340   IF Z$ = "y" THEN U = 3: GOSUB 2970: MOVES = MOVES-1: GOTO 360
  37. 350   GOTO 320
  38. 360   UU = 0: VV = 0: FF = 0: INPUT "Will you go first?", X$: IF X$ <> "n" AND X$ <> "y" GOTO 360
  39. 370   IF X$ = "n" THEN  gosub clrprt: PRINT "I always play red.": GOTO 390
  40. 380   GOSUB 1180: GOTO 400
  41. 390   X(54) = 2: X(55) = 1: X(44) = 1: X(45) = 2: GOSUB 1180: FOR DE = 1 TO 3000: NEXT DE: GOTO 780
  42. 400   soc=0:FF = FF+1: IF Z$ = "n" THEN U = -U
  43. 410   gosub clrprt:IF Z$ = "n" AND U = 4 THEN PRINT "Player #1 (green):"
  44. 420   IF Z$ = "n" AND U = -4 THEN PRINT "Player #2(red):"
  45. 430   PRINT "Your move."
  46. 440   gosub mouse:if key=0 goto 440
  47. 450   gosub numget:if badnum=1 goto 440
  48. 460   IF O < 1 OR O > 9 OR JP < 1 OR JP > 9 GOTO 450
  49. 470   A = 10*O+JP
  50. 480   IF A = 99 AND Z$ = "y" THEN XX(FF) = A: X1 = 1: GOTO 780
  51. 490   IF A = 99 AND Z$ = "n" AND U = 4 THEN XX(FF) = A: X = 1: GOTO 400
  52. 500   IF A = 99 AND Z$ = "n" AND U = -4 THEN XX(FF) = A: X1 = 1: GOTO 400
  53. 510   IF X(A) <> 0 THEN PRINT "square occupied ":gosub errsound:gosub pause:      so=so+1:if so=1 then ff=ff-1
  54. 520   if x(a)<>0 then 410
  55. 530   XX(FF) = A: X1 = 0
  56. 540   IF Z$ = "n" GOTO 3000
  57. 550   R5 = 1: GOSUB 610: R5 = 0: GOTO 720
  58. 560   R5 = 0: B1 = 0: FOR R1 = 1 TO 60: A = Z(R1)
  59. 570   IF X(A) <> 0 GOTO 590
  60. 580   GOSUB 610
  61. 590   NEXT R1
  62. 600   X1(Z) = B1: GOTO 930
  63. 610   N = 0: FOR J = 1 TO 8: K = A+Y(J)
  64. 620   IF X(K) <> 1 GOTO 680
  65. 630   K = K + Y(J): IF X(K) = 1 THEN 630
  66. 640   IF X(K) <> 2 GOTO 680
  67. 650   K = K-Y(J): IF K = A GOTO 680
  68. 660   N = N+1: IF R5 = 1 THEN X(K) = 2: GOTO 650
  69. 670   GOTO 650
  70. 680   NEXT J
  71. 690   IF N > 0 OR N < B1 GOTO 710
  72. 700   B1 = N
  73. 710   RETURN
  74. 720   IF N > 0 GOTO 740
  75. 730   PRINT "Illegal move":gosub errsound:gosub pause:GOTO 410
  76. 740   IF Z$ = "y" THEN X(A) = 2: GOSUB 1180:gosub clrprt:?"I'm thinking."
  77. 750   IF Z$ = "n" THEN X(A) = U: GOSUB 1180
  78. 760   IF Z$ = "n" GOTO 400
  79. 770   REM        COMPUTER MOVE
  80. 780   FF = FF+1: IF FF = 1 GOTO 1440
  81. 790   IF LL = 1 OR FF <= 14 GOTO 810
  82. 800   gosub evaluator: if ll>2 then gosub gambit
  83. 810   N1 = 0: G(1) = 0: R4 = 0: FOR R = 1 TO 60: A = Z(R): IF X(A) <> 0 GOTO 840
  84. 820   GOSUB 1000
  85. 830   IF G(1) <> 0 AND (FF <= 14 OR LL = 1) THEN R4 = 1: GOSUB 1000: GOTO 1140
  86. 840   NEXT R
  87. 850   IF G(1) = 0 GOTO 980
  88. 860   REM      EVALUATOR
  89. 870   FOR Z = 1 TO N1
  90. 880   EV(Z) = A(G(Z))+60-YY(Z): NEXT Z: RR = EV(1): GG = YY(1)
  91. 890   REM      SORT
  92. 900   FOR Z = 1 TO N1: IF EV(Z) <= RR GOTO 920
  93. 910   GG = YY(Z)
  94. 920   NEXT Z: A = Z(GG): R4 = 1: GOSUB 1000: GOTO 1140
  95. 930   gosub 1320
  96. 940   REM     FLIP
  97. 950   FOR Z = 1 TO N1: IF X1(Z) = 0 THEN X1(Z) = .1
  98. 960   X3(Z) = X2(Z)/X1(Z): NEXT Z
  99. 970   GOSUB 1330: R4 = 1: GOSUB 1000: GOTO 1140
  100. 980   PRINT "Computer cannot move." : X = 1: XX(FF) = A:gosub pause:               if x=1 and x1=1 goto 1220
  101. 990   GOTO 400
  102. 1000  N = 0: FOR J = 1 TO 8: K = A+Y(J)
  103. 1010  REM     LEGAL MOVE?
  104. 1020  IF X(K) <> 2 GOTO 1090
  105. 1030  K = K+Y(J): IF X(K) = 2 THEN 1030
  106. 1040  IF X(K) <> 1 GOTO 1090
  107. 1050  K = K-Y(J): IF K = A GOTO 1090
  108. 1060  N = N+1: IF R4 = 1 THEN X(K) = 1
  109. 1070  IF R4 = 2 THEN X(K) = 1: V = V+1: X(V) = K
  110. 1080  GOTO 1050
  111. 1090  NEXT J
  112. 1100  IF R4 = 2 GOTO 1120
  113. 1110  IF N > 0 THEN N1 = N1+1: G(N1) = A: X2(N1) = N: YY(N1) = R
  114. 1120  RETURN
  115. 1130  REM       COMPUTER PLAY
  116. 1140  S = INT(A/10): T = A-10*S+64: W$ = CHR$(T): JP = VAL(W$): V = 0: X(A) = 1
  117. 1150  JP = A-(S*10):gosub clrprt
  118. 1160  X = 0: XX(FF) = A: PRINT "I play at "; S; ","; JP: FOR J = 1 TO N1: H(J) = 0: G(J) = 0: X2(J) = 0: X3(J) = 0: X1(J) = 0: EV(J) = 0: YY(J) = 0: NEXT J
  119. 1170  gosub pause:GG = 0: GOSUB 1180: GOTO 400
  120. 1180  GOSUB boardup
  121. 1190  IF X = 1 AND X1 = 1 GOTO 1220
  122. 1200  RETURN
  123. 1210  REM         END
  124. 1220  M = 0: N = 0: FOR K = 11 TO 88: IF X(K) = 1 OR X(K) = -4 THEN M = M+1
  125. 1230  IF X(K) = 2 OR X(K) = 4 THEN N = N+1
  126. 1240  NEXT K
  127. 1250  gosub clrprt:PRINT "Green="; N; "  Red="; M
  128. 1260  IF Z$ = "n" GOTO 1300
  129. 1270  IF M = N THEN PRINT "We both played well and tied."
  130. 1280  IF M < N THEN PRINT "Congratulations. You have won."
  131. 1290  PRINT "Thank you for a fine game."
  132. 1300  INPUT "Would you like to play again?", RSP$: IF LEFT$(RSP$, 1) = "Y" OR LEFT$(RSP$, 1) = "y" then gosub init:goto 320
  133. 1310  END
  134. 1320  FOR R = 1 TO V: X(H(R)) = 2: NEXT R: X(S1) = 0: RETURN
  135. 1330  N = N1: D = 1
  136. 1340  D = D*2: IF D < N GOTO 1340
  137. 1350  D = INT((D-1)/2)
  138. 1360  IF D = 0 THEN A = G(1): RETURN
  139. 1370  it = N-D: FOR I = 1 TO it: J = I
  140. 1380  L = J+D
  141. 1390  IF X3(L) > X3(J) THEN T = X3(L): T1 = G(J): X3(J) = X3(L): G(J) = G(L): X3(L) = T: G(L) = T1: J = J-D: GOTO 1410
  142. 1400  GOTO 1420
  143. 1410  IF j > 0 GOTO 1380
  144. 1420  NEXT I: GOTO 1350
  145. 1430  REM        OPENER
  146. 1440  SS = INT(1+RND(1)*4)
  147. 1450  IF SS = 1 THEN A = 35: X(45) = 1: GOTO 1140
  148. 1460  IF SS = 2 THEN A = 46: X(45) = 1: GOTO 1140
  149. 1470  IF SS = 3 THEN A = 53: X(54) = 1: GOTO 1140
  150. 1480  IF SS = 4 THEN A = 64: X(54) = 1: GOTO 1140
  151. 1490  EVALUATOR:
  152. 1500  A$ = "": B$ = "": C$ = "": D$ = "": FOR K = 11 TO 18: IF X(K) = 0 THEN A$ = A$+"0"
  153. 1510  IF X(K) = 1 THEN A$ = A$+"1"
  154. 1520  IF X(K) = 2 THEN A$ = A$+"2"
  155. 1530  IF X(K+70) = 0 THEN B$ = B$+"0"
  156. 1540  IF X(K+70) = 1 THEN B$ = B$+"1"
  157. 1550  IF X(K+70) = 2 THEN B$ = B$+"2"
  158. 1560  NEXT
  159. 1570  FOR K = 11 TO 81 STEP 10: IF X(K) = 0 THEN C$ = C$+"0"
  160. 1580  IF X(K) = 1 THEN C$ = C$+"1"
  161. 1590  IF X(K) = 2 THEN C$ = C$+"2"
  162. 1600  IF X(K+7) = 0 THEN D$ = D$+"0"
  163. 1610  IF X(K+7) = 1 THEN D$ = D$+"1"
  164. 1620  IF X(K+7) = 2 THEN D$ = D$+"2"
  165. 1630  REM     UPDATER
  166. 1640  NEXT
  167. 1650  IF X(11) = 1 THEN A(12) = 20: A(21) = 20: A(22) = 20
  168. 1660  IF X(18) = 1 THEN A(17) = 20: A(27) = 20: A(28) = 20
  169. 1670  IF X(81) = 1 THEN A(71) = 20: A(72) = 20: A(82) = 20
  170. 1680  IF X(88) = 1 THEN A(77) = 20: A(78) = 20: A(87) = 20
  171. 1690  IF A$ = "00111100" OR A$ = "01111100" OR A$ = "00112200" OR A$ = "00111200" THEN A(17) = 24
  172. 1700  IF A$ = "00111100" OR A$ = "00111110" OR A$ = "00221100" OR A$ = "00222100" OR A$ = "00211100" THEN A(12) = 24
  173. 1710  IF B$ = "00111100" OR B$ = "01111100" OR B$ = "00112200" OR B$ = "00122200" OR B$ = "00111200" THEN A(87) = 24
  174. 1720  IF B$ = "00111100" OR B$ = "00111110" OR B$ = "00221100" OR B$ = "0022210" OR B$ = "00211100" THEN A(82) = 24
  175. 1730  IF C$ = "00111100" OR C$ = "01111100" OR C$ = "00112200" OR C$ = "00122200" OR C$ = "00111200" THEN A(71) = 24
  176. 1740  IF C$ = "00111100" OR C$ = "00111110" OR C$ = "00221100" OR C$ = "00222100" OR C$ = "00211100" THEN E(21) = 24
  177. 1750  IF D$ = "00111100" OR D$ = "01111100" OR D$ = "00112200" OR D$ = "00122200" OR D$ = "00111200" THEN A(78) = 24
  178. 1760  IF D$ = "00111100" OR D$ = "00111110" OR D$ = "00221100" OR D$ = "00222100" OR D$ = "00211100" THEN A(28) = 24
  179. 1770  IF A$ = "20111110" THEN A(12) = -64
  180. 1780  IF A$ = "01111102" THEN A(17) = -64
  181. 1790  IF B$ = "20222220" THEN A(82) = -64
  182. 1800  IF B$ = "01111102" THEN A(87) = -64
  183. 1810  IF C$ = "20111110" THEN A(21) = -64
  184. 1820  IF C$ = "01111102" THEN A(71) = -64
  185. 1830  IF D$ = "20111110" THEN A(28) = -64
  186. 1840  IF D$ = "01111102" THEN A(78) = -64
  187. 1850  IF A$ = "02220100" THEN A(15) = -32
  188. 1860  IF A$ = "00102220" THEN A(14) = -32
  189. 1870  IF B$ = "02220100" THEN A(85) = -32
  190. 1880  IF B$ = "00102220" THEN A(84) = -32
  191. 1890  IF C$ = "02220100" THEN A(51) = -32
  192. 1900  IF C$ = "00102220" THEN A(41) = -32
  193. 1910  IF D$ = "02220100" THEN A(58) = -32
  194. 1920  IF D$ = "00102220" THEN A(48) = -32
  195. 1930  IF LEFT$(A$,4) = "0102" THEN A(13) = -32
  196. 1940  IF RIGHT$(A$,4) = "2010" THEN A(16) = -32
  197. 1950  IF LEFT$(B$,4) = "0102" THEN A(83) = -32
  198. 1960  IF RIGHT$(B$,4) = "2010" THEN A(86) = -32
  199. 1970  IF LEFT$(C$,4) = "0102" THEN A(31) = -32
  200. 1980  IF RIGHT$(C$,4) = "2010" THEN A(61) = -32
  201. 1990  IF LEFT$(D$,4) = "0102" THEN A(38) = -32
  202. 2000  IF RIGHT$(D$,4) = "2010" THEN A(68) = -32
  203. 2010  IF A$ = "00002100" THEN A(14) = 24
  204. 2020  IF A$ = "00120000" THEN A(15) = 24
  205. 2030  IF B$ = "00002100" THEN A(84) = 24
  206. 2040  IF B$ = "00120000" THEN A(85) = 24
  207. 2050  IF C$ = "00002100" THEN A(41) = 24
  208. 2060  IF C$ = "00120000" THEN A(51) = 24
  209. 2070  IF D$ = "00002100" THEN A(48) = 24
  210. 2080  IF D$ = "00120000" THEN A(58) = 24
  211. 2090  IF A$ = "00001110" THEN A(14) = 24
  212. 2100  IF A$ = "01110000" THEN A(15) = 24
  213. 2110  IF B$ = "00001110" THEN A(84) = 24
  214. 2120  IF B$ = "01110000" THEN A(85) = 24
  215. 2130  IF C$ = "00001110" THEN A(41) = 24
  216. 2140  IF C$ = "01110000" THEN A(51) = 24
  217. 2150  IF D$ = "00001110" THEN A(48) = 24
  218. 2160  IF D$ = "01110000" THEN A(58) = 24
  219. 2170  IF A$ = "00210000" OR A$ = "00221000" OR A$ = "00211000" OR A$ = "00211110" THEN A(12) = 24
  220. 2180  IF A$ = "00001200" OR A$ = "00012200" OR A$ = "0011200" OR A$ = "01111200" THEN A(17) = 24
  221. 2190  IF B$ = "00210000" OR B$ = "00221000" OR B$ = "00211000" OR B$ = "00211110" THEN A(82) = 24
  222. 2200  IF B$ = "00001200" OR B$ = "00012200" OR B$ = "00011200" OR B$ = "01111200" THEN A(87) = 24
  223. 2210  IF C$ = "00210000" OR C$ = "00221000" OR C$ = "0021100" OR C$ = "00211110" THEN A(21) = 24
  224. 2220  IF C$ = "00001200" OR C$ = "00012200" OR C$ = "00011200" OR C$ = "01111200" THEN A(71) = 24
  225. 2230  IF D$ = "00210000" OR D$ = "00221000" OR D$ = "00211000" OR D$ = "02111100" THEN A(28) = 24
  226. 2240  IF D$ = "00001200" OR D$ = "00012200" OR D$ = "00011200" OR D$ = "01111200" THEN A(78) = 24
  227. 2250  IF A$ = "00022200" OR A$ = "00222200" THEN A(17) = -32
  228. 2260  IF A$ = "00222000" OR A$ = "00222200" THEN A(12) = -32
  229. 2270  IF B$ = "00022200" OR B$ = "00222200" THEN A(87) = -32
  230. 2280  IF B$ = "00222000" OR B$ = "00222200" THEN A(82) = -32
  231. 2290  IF C$ = "00022200" OR C$ = "00222200" THEN A(71) = -32
  232. 2300  IF C$ = "00222000" OR C$ = "00222200" THEN A(21) = -32
  233. 2310  IF D$ = "00022200" OR D$ = "00222200" THEN A(78) = -32
  234. 2320  IF D$ = "00222000" OR D$ = "00222200" THEN A(28) = -32
  235. 2330  IF A$ = "00200200" THEN A(14) = -2: E(15) = -2
  236. 2340  IF B$ = "00200200" THEN A(84) = -2: E(85) = -2
  237. 2350  IF C$ = "00200200" THEN A(41) = -2: E(51) = -2
  238. 2360  IF D$ = "00200200" THEN A(48) = -2: E(58) = -2
  239. 2370  IF A$ = "01110000" THEN A(16) = -32
  240. 2380  IF A$ = "00001110" THEN A(13) = -32
  241. 2390  IF B$ = "01110000" THEN A(86) = -32
  242. 2400  IF B$ = "00001110" THEN A(83) = -32
  243. 2410  IF C$ = "01110000" THEN a(83) = -32
  244. 2420  IF C$ = "00001110" THEN A(32) = -32
  245. 2430  IF D$ = "01110000" THEN A(68) = -21
  246. 2440  IF D$ = "00001110" THEN A(38) = -32
  247. 2450  IF A$ = "01110200" THEN a(15) = -32
  248. 2460  IF A$ = "01111020" OR A$ = "00111020" THEN a(16) = -32
  249. 2470  IF A$ = "00201110" THEN a(14) = -32
  250. 2480  IF A$ = "02011110" OR A$ = "02011100" THEN a(13) = -32
  251. 2490  IF B$ = "01110200" THEN a(85) = -32
  252. 2500  IF B$ = "01111020" OR B$ = "00111020" THEN a(86) = -32
  253. 2510  IF B$ = "00201110" THEN a(84) = -32
  254. 2520  IF B$ = "02011110" OR B$ = "02011100" THEN a(83) = -32
  255. 2530  IF C$ = "01110200" THEN a(51) = -32
  256. 2540  IF C$ = "01111020" OR C$ = "00111020" THEN a(61) = -32
  257. 2550  IF C$ = "00201110" THEN a(41) = -32
  258. 2560  IF C$ = "02011110" OR C$ = "02011100" THEN a(31) = -32
  259. 2570  IF D$ = "01110200" THEN a(58) = -32
  260. 2580  IF D$ = "01111020" OR D$ = "00111020" THEN a(68) = -32
  261. 2590  IF D$ = "00201110" THEN a(48) = -32
  262. 2600  IF D$ = "02011110" OR D$ = "02011100" THEN a(38) = -32
  263. 2610  IF A$ = "02222200" THEN a(17) = -96
  264. 2620  IF A$ = "00222220" THEN a(12) = -96
  265. 2630  IF B$ = "02222200" THEN a(87) = -96
  266. 2640  IF B$ = "00222220" THEN a(82) = -96
  267. 2650  IF C$ = "02222200" THEN a(71) = -96
  268. 2660  IF C$ = "00222220" THEN a(21) = -96
  269. 2670  IF D$ = "02222200" THEN a(78) = -96
  270. 2680  IF D$ = "00222220" THEN a(28) = -96
  271. 2690  return
  272. 2700  GAMBIT:
  273. 2710  IF A$ = "00222220" AND Z(31) <> 0 THEN a(22) = 24
  274. 2720  IF A$ = "20222220" THEN a(12) = 34
  275. 2730  IF A$ = "02222200" AND X(38) = 0 THEN a(27) = 24
  276. 2740  IF A$ = "02222202" THEN a(17) = 34
  277. 2750  IF B$ = "00222220" AND X(61) <> 0 THEN a(77) = 24
  278. 2760  IF B$ = "20222220" THEN a(82) = 34
  279. 2770  IF B$ = "02222200" AND X(68) = 0 THEN a(77) = 24
  280. 2780  IF B$ = "02222202" THEN a(87) = 34
  281. 2790  IF C$ = "00222220" AND X(13) <> 0 THEN a(22) = 24
  282. 2800  IF C$ = "20222220" THEN a(21) = 34
  283. 2810  IF C$ = "02222200" AND X(83) <> 0 THEN a(72) = 24
  284. 2820  IF C$ = "02222202" THEN a(71) = 34
  285. 2830  IF D$ = "00222220" AND X(16) <> 0 THEN a(27) = 24
  286. 2840  IF D$ = "20222220" THEN a(28) = 34
  287. 2850  IF D$ = "02222200" AND X(86) <> 0 THEN a(77) = 24
  288. 2860  IF D$ = "02222202" THEN a(78) = 34
  289. 2870  REM       COMPUTER PROTECTS
  290. 2880  IF A$ = "00111110" OR C$ = "00111110" THEN a(11) = -96
  291. 2890  IF A$ = "01111100" OR D$ = "00111110" THEN a(18) = -96
  292. 2900  IF B$ = "00111110" OR C$ = "01111100" THEN a(81) = -96
  293. 2910  IF B$ = "01111100" OR D$ = "01111100" THEN a(88) = -96
  294. 2920  IF A$ = "01111110" THEN a(11) = 64: a(18) = 64
  295. 2930  IF B$ = "01111110" THEN a(81) = 64
  296. 2940  IF C$ = "01111110" THEN a(11) = 64
  297. 2950  IF D$ = "01111110" THEN a(18) = 64
  298. 2960  return
  299. 2970  INPUT "How hard should I think (1-4)";LL: IF LL <1 and l>4 then 2970
  300. 2980  RETURN
  301. 2990  REM         2PLAYERS
  302. 3000  N = 0: FOR J = 1 TO 8: K = A+Y(J)
  303. 3010  IF X(K) <> -U GOTO 3060
  304. 3020  K = K+Y(J): IF X(K) = -U THEN 3020
  305. 3030  IF X(K) <> U GOTO 3060
  306. 3040  K = K-Y(J): IF K = A GOTO 3060
  307. 3050  N = N + 1: X(K) = U: GOTO 3040
  308. 3060  NEXT J: X = 0: GOTO 720
  309. 3070  BOARDUP: x=287:y=11:q=0:ht=18:wd=36:pt=1:pt2=6
  310. 3080  for i=2 to 9:for j=2 to 9
  311. 3090  q=q+1:if x(q)=3 goto 3090
  312. 3100  if nbd=1 goto 3120
  313. 3110  swap pt,pt2:color 1,1,1,pt,2:gosub pbox
  314. 3120  if x(q)=1 or x(q)=-4 then color 1,2,2,1,1:pellipse x+17,y+7,15,7
  315. 3130  if x(q)=2 or x(q)=4 then color 1,3,3,1,1:pellipse x+17,y+7,15,7
  316. 3140  x=x+wd:next j
  317. 3150  swap pt,pt2:y=y+ht:x=x-(wd*8):next i
  318. 3160  nbd=1:moves=moves+1:if moves>59 goto 1220
  319. 3170  gotoxy 1,12:?"Board positions after":?moves;"moves.":return
  320. 3180  INIT:nbd=0:moves= -1:restore 3190:FOR L = 0 TO 99: READ X(L): NEXT
  321. 3190  data      3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,2,1,0,0,0,3,3,0,0,0
  322. 3200  data      1,2,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3
  323. 3210  FOR L = 1 TO 8: READ Y(L): NEXT
  324. 3220  data     -11,-10,-9,-1,1,9,10,11
  325. 3230  FOR L = 1 TO 60: READ Z(L): NEXT
  326. 3240  data   81,88,11,18,83,86,61,68,31,38,13,16,63,66,33,36,84,85
  327. 3250  data      51,58,41,48,14,15,64,65,53,56,43,46,34,35,74,75,52,57,42,47,24
  328. 3260  data      25,73,76,62,67,32,37,23,26,82,87,71,78,21,28,12,17,72,77,22,27
  329. 3270  FOR L = 11 TO 88: READ A(L): NEXT
  330. 3280  data       64,-32,32,16,16,32,-32,64,0,0,-32,-64,2,2,2,2,-64,-32,0,0,32,2,8,4,4,8,2,32,0,0,16,2,4,0,0
  331. 3290  data       4,2,16,0,0,16,2,4,0,0,4,2,16,0,0,32,2,8,4,4,8,2,32,0,0,-32,-64,2,2,2,2,-64,-32
  332. 3300  data       0,0,64,-32,32,16,16,32,-32,64
  333. 3310  X = 0: X1 = 0: GOSUB boardup
  334. 3320  ht=9:wd=288:x=287:y=2:color 1,1,1,1,1:gosub pbox:gotoxy 45,0:?"I PASS"
  335. 3330  return
  336. ə310  X = 0: X1 = 0: GOSUB boardup
  337. 3320  ht=9:wd=288:x=287:y=2: